package com.xxl.job.executor.core.helper;

import cn.hutool.core.thread.ThreadUtil;
import com.godtree.util.bazhuayu.TaskTools;
import com.google.common.collect.Lists;
import com.xxl.job.core.context.XxlJobHelper;
import java.util.concurrent.TimeUnit;

/**
 * 任务完成
 *
 * @author lisicheng
 * @date 2023-06-14
 */
public class TaskComplete {

  // q: volatile
  // a: https://www.cnblogs.com/zhengbin/p/5654805.html
  private volatile boolean isRunning;

  private final String taskId;

  private TaskComplete(String taskId) {
    this.taskId = taskId;
    this.isRunning = true;
  }

  public static TaskComplete of(String taskId) {
    return new TaskComplete(taskId);
  }

  public void execute() {

    // 任务启动成功，轮询任务状态
    while (isRunning) {

      // 任务状态
      Integer taskStatus = TaskTools.getTaskStatus(Lists.newArrayList(taskId)).get(taskId);
      // 如果任务状态等于0，说明任务正在运行
      if (taskStatus == null || taskStatus == 0) {
        XxlJobHelper.log("任务【{}】正在运行，休眠一段时间，下次再获取任务状态", taskId);
        // 休眠5秒
        ThreadUtil.sleep(TimeUnit.SECONDS.toMillis(30));
      } else if (taskStatus == 2) {
        // 如果任务状态等于2，说明任务已经完成
        XxlJobHelper.log("任务【{}】已经完成，taskStatus【{}】", taskId, taskStatus);
        isRunning = false;
      } else {
        // 其他任务状态，说明任务已经停止
        XxlJobHelper.log("任务【{}】已经停止，taskStatus【{}】", taskId, taskStatus);
        isRunning = false;
      }

    }

  }

}
